#!/bin/bash

# 实现对证书的切换，或者可以直接一键编译新版本
# 依赖 brew install jq

# 提示用户输入模式
echo "请选择构建模式:"
echo "1. Debug"
echo "2. Release"
echo "3. 修改版本信息、Release并编译后切回Debug"
read -p "输入数字以选择模式 (1, 2 或 3): " mode

# 根据用户输入设置源文件路径和操作标记
case $mode in
    1)
        src_file="build-opt/build-profile-debug-mac.json5"
        env_src="entry/src/main/application/env/debug"
        ;;
    2)
        src_file="build-opt/build-profile-release-mac.json5"
        env_src="entry/src/main/application/env/release"
        ;;
    3)
        # 先切换到Release模式
        src_file="build-opt/build-profile-release-mac.json5"
        compile_command="true" # 标记需要编译
        update_version="true"  # 标记需要更新版本信息
        env_src="entry/src/main/application/env/release"
        ;;
    *)
        echo "错误: 无效的输入, 请输入 1, 2 或 3."
        exit 1
        ;;
esac

# 检查源文件是否存在
if [ ! -f "$src_file" ]; then
    echo "错误: 源文件不存在: $src_file"
    exit 1
fi

# 目标文件路径
dst_file="build-profile.json5"

# 拷贝文件内容为所选模式
cp "$src_file" "$dst_file"

# 检查拷贝是否成功
if [ $? -ne 0 ]; then
    echo "错误: 拷贝文件时出错."
    exit 1
fi

# 更新env.ets文件
env_dst="entry/src/main/application/env/env.ets"
if [ -f "$env_src" ]; then
    cp "$env_src" "$env_dst"
    if [ $? -eq 0 ]; then
        echo "成功: 环境配置已更新至 $env_dst."
    else
        echo "错误: 更新环境配置文件时出错."
        exit 1
    fi
else
    echo "错误: 环境配置源文件不存在: $env_src"
    exit 1
fi

# 如果是模式3，则先修改版本信息再编译
if [ "$update_version" = "true" ]; then
    app_json_file="AppScope/app.json5"

    # 检查app.json5文件是否存在
    if [ ! -f "$app_json_file" ]; then
        echo "错误: app.json5 文件不存在: $app_json_file"
        exit 1
    fi

    # 打印当前app.json5内容
    echo "当前app.json5内容如下："
    cat "$app_json_file"

    # 自动递增versionCode
    current_version_code=$(jq '.app.versionCode' "$app_json_file")
    new_version_code=$((current_version_code + 1))

    # 提示用户输入新的versionName
    read -p "请输入新的versionName: " new_version_name

    # 使用jq工具更新app.json5中的版本信息
    jq --arg vc "$new_version_code" --arg vn "$new_version_name" \
       '.app.versionCode |= tonumber | .app.versionCode = ($vc|tonumber) | .app.versionName = $vn' \
       "$app_json_file" > temp.json && mv temp.json "$app_json_file"

    # 确认更新
    echo "已更新app.json5中的版本信息为:"
    grep '"versionCode":\|versionName' "$app_json_file"
    # 更新env.ets文件
    env_dst="entry/src/main/application/env/env.ets"
fi

# 如果是模式3，则执行编译命令
if [ "$compile_command" = "true" ]; then
    echo "正在切换到Release模式并开始编译..."

    # 执行编译命令
    /Applications/DevEco-Studio.app/Contents/tools/node/bin/node \
    /Applications/DevEco-Studio.app/Contents/tools/hvigor/bin/hvigorw.js \
    --mode project -p product=default -p buildMode=release assembleApp \
    --analyze=normal --parallel --incremental --daemon

    # 检查编译命令是否成功
    if [ $? -ne 0 ]; then
        echo "错误: 编译过程中出现错误."
        exit 1
    fi

    echo "编译完成."

    # 编译完成后切换回Debug模式
    debug_src_file="build-opt/build-profile-debug-mac.json5"
    if [ -f "$debug_src_file" ]; then
        cp "$debug_src_file" "$dst_file"
        if [ $? -eq 0 ]; then
            echo "成功: 文件已恢复为Debug模式的证书配置."
        else
            echo "错误: 恢复Debug模式配置文件时出错."
            exit 1
        fi
    else
        echo "错误: Debug配置文件不存在: $debug_src_file"
        exit 1
    fi
    # 将env设置成 debug
    if [ -f "$env_src" ]; then
        cp "entry/src/main/application/env/debug" "$env_dst"
        if [ $? -eq 0 ]; then
            echo "env已经恢复成 debug模式"
        else
            echo "错误: 更新环境配置文件时出错."
            exit 1
        fi
    else
        echo "错误: 环境配置源文件不存在: $env_src"
        exit 1
    fi
else
    echo "成功: 文件已更新为模式 $mode 的证书配置."
fi